[LINUX] Provide a handy macro for detrmining if we are domain0.
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Mon, 14 Aug 2006 13:44:31 +0000 (14:44 +0100)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Mon, 14 Aug 2006 13:44:31 +0000 (14:44 +0100)
Signed-off-by: Keir Fraser <keir@xensource.com>
21 files changed:
linux-2.6-xen-sparse/arch/i386/kernel/cpu/mtrr/main-xen.c
linux-2.6-xen-sparse/arch/i386/kernel/io_apic-xen.c
linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c
linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c
linux-2.6-xen-sparse/arch/i386/kernel/time-xen.c
linux-2.6-xen-sparse/arch/i386/mm/init-xen.c
linux-2.6-xen-sparse/arch/i386/mm/ioremap-xen.c
linux-2.6-xen-sparse/arch/ia64/kernel/setup.c
linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c
linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c
linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c
linux-2.6-xen-sparse/drivers/char/tpm/tpm_xen.c
linux-2.6-xen-sparse/drivers/xen/console/console.c
linux-2.6-xen-sparse/drivers/xen/core/cpu_hotplug.c
linux-2.6-xen-sparse/drivers/xen/core/evtchn.c
linux-2.6-xen-sparse/drivers/xen/core/skbuff.c
linux-2.6-xen-sparse/drivers/xen/core/smpboot.c
linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c
linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c
linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/hypervisor.h
linux-2.6-xen-sparse/include/asm-ia64/hypervisor.h

index 8f09bd7b8d7e86657f5e723d7b9340d290fc8465..06720038ff9bd0725f297a375c80f9fb9f5f7c91 100644 (file)
@@ -178,7 +178,7 @@ static int __init mtrr_init(void)
 {
        struct cpuinfo_x86 *c = &boot_cpu_data;
 
-       if (!(xen_start_info->flags & SIF_PRIVILEGED))
+       if (!is_initial_xendomain())
                return -ENODEV;
 
        if ((!cpu_has(c, X86_FEATURE_MTRR)) &&
index e7e1aa834a05d09df0094c0c23e08029c8ca51a2..844d6e9ad97902f18c8c8c2c51ae2c3e8662e762 100644 (file)
@@ -2480,7 +2480,7 @@ static int __init io_apic_bug_finalize(void)
 {
        if(sis_apic_bug == -1)
                sis_apic_bug = 0;
-       if (xen_start_info->flags & SIF_INITDOMAIN) {
+       if (is_initial_xendomain()) {
                dom0_op_t op = { .cmd = DOM0_PLATFORM_QUIRK };
                op.u.platform_quirk.quirk_id = sis_apic_bug ?
                        QUIRK_IOAPIC_BAD_REGSEL : QUIRK_IOAPIC_GOOD_REGSEL;
index 0b180786322544776e4aec2900481f59fddfa5af..f64c8f1619d72a572715c4ba172088f55852965a 100644 (file)
@@ -318,7 +318,7 @@ static void __init probe_roms(void)
        int           i;
 
        /* Nothing to do if not running in dom0. */
-       if (!(xen_start_info->flags & SIF_INITDOMAIN))
+       if (!is_initial_xendomain())
                return;
 
        /* video rom */
@@ -1458,7 +1458,7 @@ static void __init register_memory(void)
        int           i;
 
        /* Nothing to do if not running in dom0. */
-       if (!(xen_start_info->flags & SIF_INITDOMAIN)) {
+       if (!is_initial_xendomain()) {
                legacy_init_iomem_resources(e820.map, e820.nr_map,
                                            &code_resource, &data_resource);
                return;
@@ -1618,7 +1618,7 @@ void __init setup_arch(char **cmdline_p)
 
        /* Force a quick death if the kernel panics (not domain 0). */
        extern int panic_timeout;
-       if (!panic_timeout && !(xen_start_info->flags & SIF_INITDOMAIN))
+       if (!panic_timeout && !is_initial_xendomain())
                panic_timeout = 1;
 
        /* Register a call for panic conditions. */
@@ -1661,7 +1661,7 @@ void __init setup_arch(char **cmdline_p)
        }
        bootloader_type = LOADER_TYPE;
 
-       if (xen_start_info->flags & SIF_INITDOMAIN) {
+       if (is_initial_xendomain()) {
                /* This is drawn from a dump from vgacon:startup in
                 * standard Linux. */
                screen_info.orig_video_mode = 3; 
@@ -1788,7 +1788,7 @@ void __init setup_arch(char **cmdline_p)
        }
 #endif
 
-       if (xen_start_info->flags & SIF_INITDOMAIN)
+       if (is_initial_xendomain())
                dmi_scan_machine();
 
 #ifdef CONFIG_X86_GENERICARCH
@@ -1805,7 +1805,7 @@ void __init setup_arch(char **cmdline_p)
 #endif
 
 #ifdef CONFIG_ACPI
-       if (!(xen_start_info->flags & SIF_INITDOMAIN)) {
+       if (!is_initial_xendomain()) {
                printk(KERN_INFO "ACPI in unprivileged domain disabled\n");
                acpi_disabled = 1;
                acpi_ht = 0;
@@ -1831,11 +1831,7 @@ void __init setup_arch(char **cmdline_p)
 
        register_memory();
 
-       if (xen_start_info->flags & SIF_INITDOMAIN) {
-               if (!(xen_start_info->flags & SIF_PRIVILEGED))
-                       panic("Xen granted us console access "
-                             "but not privileged status");
-
+       if (is_initial_xendomain()) {
 #ifdef CONFIG_VT
 #if defined(CONFIG_VGA_CONSOLE)
                if (!efi_enabled ||
index 733799b70a8419b735dff632f9b18ed2ca179fb2..b10026107391bf8ae086563cc4d287159b85cd5d 100644 (file)
@@ -199,7 +199,7 @@ swiotlb_init(void)
                swiotlb = 1;
        } else if ((swiotlb_force != -1) &&
                   is_running_on_xen() &&
-                  (xen_start_info->flags & SIF_INITDOMAIN)) {
+                  is_initial_xendomain()) {
                /* Domain 0 always has a swiotlb. */
                ram_end = HYPERVISOR_memory_op(XENMEM_maximum_ram_page, NULL);
                if (ram_end <= 0x7ffff)
index 504d27d663d0b240259a1e7dbd20f50d20c35839..cc9907901b44e3618d53752a3d02efb8e1090e1f 100644 (file)
@@ -470,8 +470,7 @@ int do_settimeofday(struct timespec *tv)
        sec = tv->tv_sec;
        __normalize_time(&sec, &nsec);
 
-       if ((xen_start_info->flags & SIF_INITDOMAIN) &&
-           !independent_wallclock) {
+       if (is_initial_xendomain() && !independent_wallclock) {
                op.cmd = DOM0_SETTIME;
                op.u.settime.secs        = sec;
                op.u.settime.nsecs       = nsec;
@@ -502,8 +501,7 @@ static void sync_xen_wallclock(unsigned long dummy)
        s64 nsec;
        dom0_op_t op;
 
-       if (!ntp_synced() || independent_wallclock ||
-           !(xen_start_info->flags & SIF_INITDOMAIN))
+       if (!ntp_synced() || independent_wallclock || !is_initial_xendomain())
                return;
 
        write_seqlock_irq(&xtime_lock);
@@ -532,7 +530,7 @@ static int set_rtc_mmss(unsigned long nowtime)
 
        WARN_ON(irqs_disabled());
 
-       if (independent_wallclock || !(xen_start_info->flags & SIF_INITDOMAIN))
+       if (independent_wallclock || !is_initial_xendomain())
                return 0;
 
        /* gets recalled with irq locally disabled */
index 5ba02ca0d001540c16100c93aa77c7c946f1b6e3..c0c0bb2fa8447a1ecc824d271c86681e53e911e9 100644 (file)
@@ -566,7 +566,7 @@ void __init paging_init(void)
 
        /* Setup mapping of lower 1st MB */
        for (i = 0; i < NR_FIX_ISAMAPS; i++)
-               if (xen_start_info->flags & SIF_PRIVILEGED)
+               if (is_initial_xendomain())
                        set_fixmap(FIX_ISAMAP_BEGIN - i, i * PAGE_SIZE);
                else
                        __set_fixmap(FIX_ISAMAP_BEGIN - i,
index 343826970552b52c68c32be85fd1477b8d072b94..775e0ef22d97add2eaf1c9c9d08416c280fed2d2 100644 (file)
@@ -245,7 +245,7 @@ void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned l
        /*
         * Don't remap the low PCI/ISA area, it's always mapped..
         */
-       if (xen_start_info->flags & SIF_PRIVILEGED &&
+       if (is_initial_xendomain() &&
            phys_addr >= ISA_START_ADDRESS && last_addr < ISA_END_ADDRESS)
                return (void __iomem *) isa_bus_to_virt(phys_addr);
 
@@ -425,7 +425,7 @@ void __init *bt_ioremap(unsigned long phys_addr, unsigned long size)
        /*
         * Don't remap the low PCI/ISA area, it's always mapped..
         */
-       if (xen_start_info->flags & SIF_PRIVILEGED &&
+       if (is_initial_xendomain() &&
            phys_addr >= ISA_START_ADDRESS && last_addr < ISA_END_ADDRESS)
                return isa_bus_to_virt(phys_addr);
 
index 12ab159f0d8181239a33353a5dcfe15dd2708c41..9cca9becbe0fa54671a957f64e59702cd5678271 100644 (file)
@@ -545,12 +545,7 @@ setup_arch (char **cmdline_p)
                       "flags=0x%x\n", s->arch.start_info_pfn,
                       xen_start_info->nr_pages, xen_start_info->flags);
 
-               /* xen_start_info isn't setup yet, get the flags manually */
-               if (xen_start_info->flags & SIF_INITDOMAIN) {
-                       if (!(xen_start_info->flags & SIF_PRIVILEGED))
-                               panic("Xen granted us console access "
-                                     "but not privileged status");
-               } else {
+               if (!is_initial_xendomain()) {
                        extern int console_use_vt;
                        conswitchp = NULL;
                        console_use_vt = 0;
index 00efd9a1f71a2d6a5a6179e57c60a3a9faf26cae..a219c92b1622e5dcac83fae7cb4f6140687ef28d 100644 (file)
@@ -82,7 +82,7 @@ ia64_xenmem_reservation_op(unsigned long op,
                        //    of a non-privileged domain, 
                        if ((op == XENMEM_increase_reservation ||
                             op == XENMEM_populate_physmap) &&
-                           !(xen_start_info->flags & SIF_PRIVILEGED) &&
+                           !is_initial_xendomain() &&
                            reservation.extent_order > 0)
                                return ret;
                }
index 266516b50e7d5ed5718e45b71bac29e3d00fda57..21be47fca7fda74e266c6b602033926fb7d7e3be 100644 (file)
@@ -639,7 +639,7 @@ void __init setup_arch(char **cmdline_p)
        kernel_end = 0;         /* dummy */
        screen_info = SCREEN_INFO;
 
-       if (xen_start_info->flags & SIF_INITDOMAIN) {
+       if (is_initial_xendomain()) {
                /* This is drawn from a dump from vgacon:startup in
                 * standard Linux. */
                screen_info.orig_video_mode = 3;
@@ -860,8 +860,7 @@ void __init setup_arch(char **cmdline_p)
 
        }
 
-       if ( ! (xen_start_info->flags & SIF_INITDOMAIN))
-       {
+       if (!is_initial_xendomain()) {
                acpi_disabled = 1;
 #ifdef  CONFIG_ACPI
                acpi_ht = 0;
@@ -910,7 +909,7 @@ void __init setup_arch(char **cmdline_p)
         */
 #if defined(CONFIG_XEN_PRIVILEGED_GUEST)
        probe_roms();
-       if (xen_start_info->flags & SIF_INITDOMAIN) {
+       if (is_initial_xendomain()) {
                machine_e820 = alloc_bootmem_low_pages(PAGE_SIZE);
 
                memmap.nr_entries = E820MAX;
@@ -919,7 +918,7 @@ void __init setup_arch(char **cmdline_p)
                BUG_ON(HYPERVISOR_memory_op(XENMEM_machine_memory_map, &memmap));
 
                e820_reserve_resources(machine_e820, memmap.nr_entries);
-       } else if (!(xen_start_info->flags & SIF_INITDOMAIN))
+       } else
                e820_reserve_resources(e820.map, e820.nr_map);
 #elif defined(CONFIG_XEN)
        e820_reserve_resources(e820.map, e820.nr_map);
@@ -938,7 +937,7 @@ void __init setup_arch(char **cmdline_p)
        }
 
 #if defined(CONFIG_XEN_PRIVILEGED_GUEST)
-       if (xen_start_info->flags & SIF_INITDOMAIN) {
+       if (is_initial_xendomain()) {
                e820_setup_gap(machine_e820, memmap.nr_entries);
                free_bootmem(__pa(machine_e820), PAGE_SIZE);
        }
@@ -957,11 +956,7 @@ void __init setup_arch(char **cmdline_p)
                set_iopl.iopl = 1;
                HYPERVISOR_physdev_op(PHYSDEVOP_set_iopl, &set_iopl);
 
-               if (xen_start_info->flags & SIF_INITDOMAIN) {
-                       if (!(xen_start_info->flags & SIF_PRIVILEGED))
-                               panic("Xen granted us console access "
-                                     "but not privileged status");
-                      
+               if (is_initial_xendomain()) {
 #ifdef CONFIG_VT
 #if defined(CONFIG_VGA_CONSOLE)
                        conswitchp = &vga_con;
index 4ee3b3b1df2c2c4ab282d5998ad1c8c81bf02a94..ff7928493738ad50edb8da53d72891711cb72f3c 100644 (file)
@@ -789,7 +789,7 @@ void __init paging_init(void)
 
        /* Setup mapping of lower 1st MB */
        for (i = 0; i < NR_FIX_ISAMAPS; i++)
-               if (xen_start_info->flags & SIF_PRIVILEGED)
+               if (is_initial_xendomain())
                        set_fixmap(FIX_ISAMAP_BEGIN - i, i * PAGE_SIZE);
                else
                        __set_fixmap(FIX_ISAMAP_BEGIN - i,
index 597339f6b88e9c01275ad010d8e5e758f47aeb1a..68079cb56a00a910f115425c460e63ef563f3418 100644 (file)
@@ -718,9 +718,8 @@ static int __init tpmif_init(void)
        long rc = 0;
        struct tpm_private *tp;
 
-       if ((xen_start_info->flags & SIF_INITDOMAIN)) {
+       if (is_initial_xendomain())
                return -EPERM;
-       }
 
        tp = tpm_private_get();
        if (!tp) {
index b9dd2f67b1bcf402a26665b66e709256062a5457..b35a7ed304fe25f8def1b8667f0933289f03d05d 100644 (file)
@@ -188,7 +188,7 @@ static int __init xen_console_init(void)
        if (!is_running_on_xen())
                return __RETCODE;
 
-       if (xen_start_info->flags & SIF_INITDOMAIN) {
+       if (is_initial_xendomain()) {
                if (xc_mode == XC_DEFAULT)
                        xc_mode = XC_SERIAL;
                kcons_info.write = kcons_write_dom0;
@@ -247,7 +247,7 @@ void xencons_force_flush(void)
        int sz;
 
        /* Emergency console is synchronous, so there's nothing to flush. */
-       if (xen_start_info->flags & SIF_INITDOMAIN)
+       if (is_initial_xendomain())
                return;
 
        /* Spin until console data is flushed through to the daemon. */
@@ -318,7 +318,7 @@ static void __xencons_tx_flush(void)
        int sent, sz, work_done = 0;
 
        if (x_char) {
-               if (xen_start_info->flags & SIF_INITDOMAIN)
+               if (is_initial_xendomain())
                        kcons_write_dom0(NULL, &x_char, 1);
                else
                        while (x_char)
@@ -332,7 +332,7 @@ static void __xencons_tx_flush(void)
                sz = wp - wc;
                if (sz > (wbuf_size - WBUF_MASK(wc)))
                        sz = wbuf_size - WBUF_MASK(wc);
-               if (xen_start_info->flags & SIF_INITDOMAIN) {
+               if (is_initial_xendomain()) {
                        kcons_write_dom0(NULL, &wbuf[WBUF_MASK(wc)], sz);
                        wc += sz;
                } else {
@@ -622,7 +622,7 @@ static int __init xencons_init(void)
                return rc;
        }
 
-       if (xen_start_info->flags & SIF_INITDOMAIN) {
+       if (is_initial_xendomain()) {
                xencons_priv_irq = bind_virq_to_irqhandler(
                        VIRQ_CONSOLE,
                        0,
index 0969e213a090fbf994cf803010c6d13b3bfebd78..ed1c3c73ca896e97d049cbb4255a96583fd55002 100644 (file)
@@ -92,7 +92,7 @@ static int setup_cpu_watcher(struct notifier_block *notifier,
                .flags = XBWF_new_thread };
        (void)register_xenbus_watch(&cpu_watch);
 
-       if (!(xen_start_info->flags & SIF_INITDOMAIN)) {
+       if (!is_initial_xendomain()) {
                for_each_cpu(i)
                        vcpu_hotplug(i);
                printk(KERN_INFO "Brought up %ld CPUs\n",
index 69541c6aa5a6d50110e4b2b7fdc14df41c87d376..b455a3b10a9a66460cdc544433769f419623ef18 100644 (file)
@@ -840,8 +840,7 @@ void __init xen_init_IRQ(void)
 
 #ifdef RTC_IRQ
                /* If not domain 0, force our RTC driver to fail its probe. */
-               if ((i == RTC_IRQ) &&
-                   !(xen_start_info->flags & SIF_INITDOMAIN))
+               if ((i == RTC_IRQ) && !is_initial_xendomain())
                        continue;
 #endif
 
index f38f3cffedecb93e6ff4aeb658ff5f4d2a93fb56..a4a2e4edcec2ed1d85de62ef37761b0e4164f904 100644 (file)
@@ -121,8 +121,7 @@ static int __init skbuff_init(void)
        for (order = 0; order <= MAX_SKBUFF_ORDER; order++) {
                size = PAGE_SIZE << order;
                sprintf(name[order], "xen-skb-%lu", size);
-               if (is_running_on_xen() &&
-                   (xen_start_info->flags & SIF_PRIVILEGED))
+               if (is_running_on_xen() && is_initial_xendomain())
                        skbuff_order_cachep[order] = kmem_cache_create(
                                name[order], size, size, 0,
                                skbuff_ctor, skbuff_dtor);
index 613f835f3f22bb388ea4d01e23794459571894f3..71990e04d577b82fb7ad8b5b0333decf81cfe868 100644 (file)
@@ -294,7 +294,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
                irq_ctx_init(cpu);
 
 #ifdef CONFIG_HOTPLUG_CPU
-               if (xen_start_info->flags & SIF_INITDOMAIN)
+               if (is_initial_xendomain())
                        cpu_set(cpu, cpu_present_map);
 #else
                cpu_set(cpu, cpu_present_map);
index ef6e134a7dea54853c8245f0f957aa05b0687aa8..26745de79a7759202f0f00a6db7b8da91f413252 100644 (file)
@@ -1818,7 +1818,7 @@ static int __init netif_init(void)
        if (!is_running_on_xen())
                return -ENODEV;
 
-       if (xen_start_info->flags & SIF_INITDOMAIN)
+       if (is_initial_xendomain())
                return 0;
 
        IPRINTK("Initialising virtual ethernet driver.\n");
index 3c9bb9f0d2d60c0c7c8db8b11b3ef38f5b5c7381..9f03eae6e4e6c5902fe102e8bf050acd135c6680 100644 (file)
@@ -246,7 +246,7 @@ static int capabilities_read(char *page, char **start, off_t off,
        int len = 0;
        *page = 0;
 
-       if (xen_start_info->flags & SIF_INITDOMAIN)
+       if (is_initial_xendomain())
                len = sprintf( page, "control_d\n" );
 
        *eof = 1;
index 38378554afa7a2392d7f3bdfa87c50f1733c066f..3d9e2e27d9864567508c1a6a939bc8e83e0cf87e 100644 (file)
@@ -58,6 +58,7 @@ extern shared_info_t *HYPERVISOR_shared_info;
 
 /* arch/xen/i386/kernel/setup.c */
 extern start_info_t *xen_start_info;
+#define is_initial_xendomain() (xen_start_info->flags & SIF_INITDOMAIN)
 
 /* arch/xen/kernel/evtchn.c */
 /* Force a proper event-channel callback from Xen. */
index 67c45d90e90913ac665db1cdf758fcac66a3e686..a4fb434f141d3496b38694ba1cd149ecf7a806c9 100644 (file)
@@ -59,6 +59,8 @@ extern int running_on_xen;
 extern shared_info_t *HYPERVISOR_shared_info;
 extern start_info_t *xen_start_info;
 
+#define is_initial_xendomain() (xen_start_info->flags & SIF_INITDOMAIN)
+
 void force_evtchn_callback(void);
 
 /* Turn jiffies into Xen system time. XXX Implement me. */